package com.sunfeng.netty.atguigu.inboundhandlerandoutboundhandler;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ReplayingDecoder;

import java.util.List;

/**
 * 1、并 不 是 所 有 的 ByteBuf 操 作 都 被 支 持 ， 如 果 调 用 了 一 个 不 被 支 持 的 方 法 ， 将 会 抛 出 一 个
 * UnsupportedOperationException。
 * <p>
 * 2、ReplayingDecoder 在某些情况下可能稍慢于 ByteToMessageDecoder， 例如网络缓慢并且消息格式复杂时，
 * 消息会被拆成了多个碎片， 速度变慢
 * ReplayingDecoder<S>
 * 参数 S 指定了用户状态管理的类型，其中 Void 代表不需要状态管理
 *
 * @author sunfeng
 */
public class MyByteToLongDecoder2 extends ReplayingDecoder<Void> {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {

        System.out.println("MyByteToLongDecoder2 被调用");
        //在 ReplayingDecoder 不需要判断数据是否足够读取，内部会进行处理判断
        out.add(in.readLong());


    }
}
